var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var cors = require('cors');// -跨域
var mysql = require('mysql');// -数据库
var expressJwt = require('express-jwt'); // -jwt

var indexRouter = require('./routes/index');

var app = express();


// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(cors()); // -跨域

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// -添加jwt的校验拦截(headers固定Authorization)
// app.use(expressJwt({ // 默认将所有接口全部拦截
//   secret: 'abc', // 配置秘钥
//   algorithms: ['HS256'], // 加密算法
//   requestProperty: 'abc'
// }).unless({
//   path: ['/user/login', '/upload'] // 添加了拦截白名单
// }))

// 模块路由请求之前
app.use('/', indexRouter);

// -拦截接口，如果token不正确，或者未传递token的值，则返回错误信息
// app.use(function (err, req, res, next) {
//   if (err.name === 'UnauthorizedError') {
//     res.status(401).send('token失效');
//   }
// });

// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};
  res.locals.error = req.app.post('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

// -创建一个 mysql 连接，只初始化一次，后续直接拿来使用
const connection = mysql.createConnection({
  host: 'localhost',    // ip 
  port: 3306,           // 修改端口号 默认：3306 3307
  user: 'root',         // 用户名 root
  password: 'rootroot', // 密码 rootroot 222220shawu
  database: 'textname',   // 数据库
  timezone: "SYSTEM", //时间格式转换
});

// -连接mysql(必须执行)
connection.connect()
console.log("mysql连接成功" + "http://localhost:3305/");

// -共享mysql链接
global.connection = connection

// -共享sql语句执行方法
global.query = (sql) => {
  return new Promise((resolve, reject) => {
    connection.query(sql, function (error, results, fields) {
      if (error) {
        reject(error)
      } else {
        resolve(results) // select * from user [{}]
      }
    })
  })
}

module.exports = app;
